package entidades;

/**
 * @author Paulo -> 42243
 * @author Daniela -> 42439
 *
 */

import java.util.Random;
import main.*;
import shared.*;

public class Pirata implements Runnable{
	
	public enum Estado {
		ILHA,
		BARCO,
		PRISAO
	}
	
	private int id; 
	private Estado estado;
	private int quantidadeMaxima;
	private int quantidadeActual;
	
	public Pirata (int id, int q) {
		this.id = id;
		this.quantidadeMaxima = q;
		this.estado = Estado.ILHA;
	}
	
	public int getId() {
		return this.id;
	}
	
	public int getQuantidadeMaxima() {
		return this.quantidadeMaxima;
	}
	
	public int getQuantidadeActual() {
		return this.quantidadeActual;
	}

	private int descarregarTesouro (BarcoPirata barco, Gruta gruta) throws InterruptedException {
		this.estado = Estado.ILHA;
		this.quantidadeActual = barco.descarregarTesouro(this.quantidadeMaxima, this.id);
		
		Thread.sleep (mover());
		
		gruta.guardarTesouro(this.quantidadeActual, this.getId());

		return this.quantidadeActual;
	}
	
	private void regressarBarco () {
		this.estado = Estado.BARCO;
		this.quantidadeActual = 0;
	}
	
	public void irPrisao () {
		this.estado = Estado.PRISAO;
	}
	
	private int mover() {
		return (int) (Math.round((new Random()).nextDouble())+1) * 1000;
	}
	
	@Override
	public void run() {
		do{
			if (this.estado.equals(Estado.ILHA) && Preferences.barcoPirata.getTesouro() == 0) {
				System.out.println("O Pirata " + this.id + " regressou ao barco!");
				Preferences.log.add("O Pirata " + this.id + " regressou ao barco!");
				regressarBarco();
			}
			else if (this.estado.equals(Estado.BARCO) || Preferences.barcoPirata.getTesouro() > 0) {
				try {
					descarregarTesouro(Preferences.barcoPirata, Preferences.gruta);
				} 
				catch (InterruptedException e) {
				}
			}
			else if (this.estado.equals(Estado.PRISAO)) {
				System.out.println("O Pirata "+this.id+" foi preso!");
				Preferences.log.add("O Pirata "+this.id+" foi preso!");
				irPrisao();
			}
			Main.setList(Preferences.log);
		}while(Preferences.barcoPirata.getTesouro() > 0);
	}
}